package com.asia5b.a5mall.middleware.api

import com.asia5b.a5mall.middleware.model.base.ResultModel
import com.asia5b.a5mall.middleware.model.order.*
import io.reactivex.Observable
import okhttp3.ResponseBody
import retrofit2.adapter.rxjava2.Result
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Path
import retrofit2.http.Query

/**
 * Created by zhangyuncai on 2019/12/21.
 */
interface OrderApi {

    /** ============================== 物流查询接口  =============================== */

//    /**
//     * @Note   查询物流详细
//     * @param   id    物流公司id
//     * @param   num    快递单号
//     */
//    @GET("express")
//    fun express(@Query("id") id :String, @Query("num") num :String): Observable<Result<ResponseBody>>

    /**
     *  查询物流详细信息（国内）
     *  @param   ids    物流公司id
     * @param   num    快递单号
     */
//    @GET("express")
//    fun express(@Query("id") id: String, @Query("num") num: String): Observable<Result<ResponseBody>>

//    @GET("express/{ids}")
//    fun expressDetail(@Path("ids") ids: String, @Query("num") num: String): Observable<ArrayList<ExpressDetailList>>

    @GET("express/{ids}")
    fun logisDetailListByGuonei(@Path("ids") ids: String, @Query("num") num: String): Observable<ArrayList<LogisDetailModel>>

    /**
     * 查询物流详细信息（国际）
     */
//    @GET("express/getGjExpress")
//    fun expressDetail(@Query("order_code") order_code: String): Observable<ArrayList<ExpressDetailList>>

    /**
     * @api
     * 获取国际国内物流单号
     * @param order_code 运单号
     */
    @GET("express/getGjExpress")
    fun logisDetailListByGuoji(@Query("order_code") order_code: String): Observable<ArrayList<LogisDetailModel>>

    /**
     * 根据待收货订单号查询国内国际物流单号
     * @param order_sn  订单对应的sn
     */
//    @GET("express/getExpresslist")
//    fun expressList(@Query("order_sn") order_sn: String): Observable<ExpressListModel>


    /**
     * @api
     * 获取国际国内物流单号(根据待收货订单号查询国内国际物流单号)
     * @param order_sn 订单号
     */
    @GET("express/getExpresslist")
    fun expressList2(@Query("order_sn") order_sn: String): Observable<LogisModel>

    /** ============================== 会员订单API  =============================== */


    /**
     * @api
     * 查询单个订单明细
     * @param order_sn 订单编号
     */
    @GET("trade/orders/{order_sn}")
    fun getOrderDetail(@Path("order_sn") orderSn: String): Observable<OrderDetailModel>


    /**
     * @api
     * 根据交易编号或者订单编号查询收银台数据
     * @param trade_sn 交易编号
     * @param order_sn 订单编号
     */
    @GET("trade/orders/cashier")
    fun getCashier(@Query("trade_sn") tradeSn: String, @Query("order_sn") orderSn: String): Observable<ResponseBody>


    /**
     * @api
     * 根据交易编号查询订单列表
     * @param trade_sn 交易编号
     */
    @GET("trade/orders/{trade_sn}/list")
    fun getOrderListByTradeSn(@Path("trade_sn") tradeSn: String): Observable<ResponseBody>


    /**
     * @api
     * 确认收货
     * @param order_sn 订单编号
     */
    @POST("trade/orders/{order_sn}/rog")
    fun rog(@Path("order_sn") orderSn: String): Observable<ResponseBody>


    /**
     * @api
     * 查询会员订单列表
     * @param goods_name 商品名称关键字
     * @param key_words 关键字
     * @param order_status 订单状态
     * @param page_no 页数
     * @param page_size 条数
     */
    @GET("trade/orders")
    fun getOrderList(@Query("goods_name") goods_name: String? = null,
                     @Query("order_status") orderStatus: String? = null,
                     @Query("house_id") house_id: Int? = null,
                     @Query("page_no") pageNo: Int,
                     @Query("page_size") pageSize: Int = ApiManager.PAGE_SIZE): Observable<ResultModel<ArrayList<OrderDetailModel>>>


    /**
     * @api
     * 取消订单
     * @param order_sn 订单编号
     * @param reason 取消原因
     */
    @POST("trade/orders/{order_sn}/cancel")
    fun cancel(@Path("order_sn") orderSn: String, @Query("reason") reason: String): Observable<ResponseBody>

    /**
     * @api
     * 获取支付登录token
     */
    @POST("trade/orders/paytoken")
    fun getPayToken(): Observable<ResultModel<Any>>


}